1 /++ 2 This module was automatically generated from the following grammar: 3 4 PlantUML_ClassDiagram: 5 UML <- blank* "@startuml" eol Content* "@enduml" (blank* / eoi) 6 7 Content < / Class 8 / Comment 9 / Inherit 10 11 Class <- "class" space+ ClassName blank* ClassBody? 12 ClassName <- identifier 13 ClassBody < '{' (Class / ~(ClassContent*))* '}' 14 ClassContent <- !Class !'}' . 15 16 Inherit < InheritRight / InheritLeft 17 InheritRight < RelateIdFrom :('-'+ "|>") RelateIdTo 18 InheritLeft < RelateIdTo :("<|" '-'+) RelateIdFrom 19 20 RelateIdFrom <- identifier 21 RelateIdTo <- identifier 22 23 Comment <- space* :'\'' ~((!eol .)*) :eol 24 25 26 +/ 27 module plantuml_grammar.class_diagram; 28 29 public import pegged.peg; 30 import std.algorithm: startsWith; 31 import std.functional: toDelegate; 32 33 struct GenericPlantUML_ClassDiagram(TParseTree) 34 { 35 import std.functional : toDelegate; 36 import pegged.dynamic.grammar; 37 static import pegged.peg; 38 struct PlantUML_ClassDiagram 39 { 40 enum name = "PlantUML_ClassDiagram"; 41 static ParseTree delegate(ParseTree)[string] before; 42 static ParseTree delegate(ParseTree)[string] after; 43 static ParseTree delegate(ParseTree)[string] rules; 44 import std.typecons:Tuple, tuple; 45 static TParseTree[Tuple!(string, size_t)] memo; 46 static this() 47 { 48 rules["UML"] = toDelegate(&UML); 49 rules["Content"] = toDelegate(&Content); 50 rules["Class"] = toDelegate(&Class); 51 rules["ClassName"] = toDelegate(&ClassName); 52 rules["ClassBody"] = toDelegate(&ClassBody); 53 rules["ClassContent"] = toDelegate(&ClassContent); 54 rules["Inherit"] = toDelegate(&Inherit); 55 rules["InheritRight"] = toDelegate(&InheritRight); 56 rules["InheritLeft"] = toDelegate(&InheritLeft); 57 rules["RelateIdFrom"] = toDelegate(&RelateIdFrom); 58 rules["RelateIdTo"] = toDelegate(&RelateIdTo); 59 rules["Comment"] = toDelegate(&Comment); 60 rules["Spacing"] = toDelegate(&Spacing); 61 } 62 63 template hooked(alias r, string name) 64 { 65 static ParseTree hooked(ParseTree p) 66 { 67 ParseTree result; 68 69 if (name in before) 70 { 71 result = before[name](p); 72 if (result.successful) 73 return result; 74 } 75 76 result = r(p); 77 if (result.successful || name !in after) 78 return result; 79 80 result = after[name](p); 81 return result; 82 } 83 84 static ParseTree hooked(string input) 85 { 86 return hooked!(r, name)(ParseTree("",false,[],input)); 87 } 88 } 89 90 static void addRuleBefore(string parentRule, string ruleSyntax) 91 { 92 // enum name is the current grammar name 93 DynamicGrammar dg = pegged.dynamic.grammar.grammar(name ~ ": " ~ ruleSyntax, rules); 94 foreach(ruleName,rule; dg.rules) 95 if (ruleName != "Spacing") // Keep the local Spacing rule, do not overwrite it 96 rules[ruleName] = rule; 97 before[parentRule] = rules[dg.startingRule]; 98 } 99 100 static void addRuleAfter(string parentRule, string ruleSyntax) 101 { 102 // enum name is the current grammar named 103 DynamicGrammar dg = pegged.dynamic.grammar.grammar(name ~ ": " ~ ruleSyntax, rules); 104 foreach(name,rule; dg.rules) 105 { 106 if (name != "Spacing") 107 rules[name] = rule; 108 } 109 after[parentRule] = rules[dg.startingRule]; 110 } 111 112 static bool isRule(string s) 113 { 114 import std.algorithm : startsWith; 115 return s.startsWith("PlantUML_ClassDiagram."); 116 } 117 mixin decimateTree; 118 119 alias spacing Spacing; 120 121 static TParseTree UML(TParseTree p) 122 { 123 if(__ctfe) 124 { 125 return pegged.peg.defined!(pegged.peg.and!(pegged.peg.zeroOrMore!(blank), pegged.peg.literal!("@startuml"), eol, pegged.peg.zeroOrMore!(Content), pegged.peg.literal!("@enduml"), pegged.peg.or!(pegged.peg.zeroOrMore!(blank), eoi)), "PlantUML_ClassDiagram.UML")(p); 126 } 127 else 128 { 129 if (auto m = tuple(`UML`, p.end) in memo) 130 return *m; 131 else 132 { 133 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.zeroOrMore!(blank), pegged.peg.literal!("@startuml"), eol, pegged.peg.zeroOrMore!(Content), pegged.peg.literal!("@enduml"), pegged.peg.or!(pegged.peg.zeroOrMore!(blank), eoi)), "PlantUML_ClassDiagram.UML"), "UML")(p); 134 memo[tuple(`UML`, p.end)] = result; 135 return result; 136 } 137 } 138 } 139 140 static TParseTree UML(string s) 141 { 142 if(__ctfe) 143 { 144 return pegged.peg.defined!(pegged.peg.and!(pegged.peg.zeroOrMore!(blank), pegged.peg.literal!("@startuml"), eol, pegged.peg.zeroOrMore!(Content), pegged.peg.literal!("@enduml"), pegged.peg.or!(pegged.peg.zeroOrMore!(blank), eoi)), "PlantUML_ClassDiagram.UML")(TParseTree("", false,[], s)); 145 } 146 else 147 { 148 forgetMemo(); 149 return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.zeroOrMore!(blank), pegged.peg.literal!("@startuml"), eol, pegged.peg.zeroOrMore!(Content), pegged.peg.literal!("@enduml"), pegged.peg.or!(pegged.peg.zeroOrMore!(blank), eoi)), "PlantUML_ClassDiagram.UML"), "UML")(TParseTree("", false,[], s)); 150 } 151 } 152 static string UML(GetName g) 153 { 154 return "PlantUML_ClassDiagram.UML"; 155 } 156 157 static TParseTree Content(TParseTree p) 158 { 159 if(__ctfe) 160 { 161 return pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Class, Spacing), pegged.peg.wrapAround!(Spacing, Comment, Spacing), pegged.peg.wrapAround!(Spacing, Inherit, Spacing)), "PlantUML_ClassDiagram.Content")(p); 162 } 163 else 164 { 165 if (auto m = tuple(`Content`, p.end) in memo) 166 return *m; 167 else 168 { 169 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Class, Spacing), pegged.peg.wrapAround!(Spacing, Comment, Spacing), pegged.peg.wrapAround!(Spacing, Inherit, Spacing)), "PlantUML_ClassDiagram.Content"), "Content")(p); 170 memo[tuple(`Content`, p.end)] = result; 171 return result; 172 } 173 } 174 } 175 176 static TParseTree Content(string s) 177 { 178 if(__ctfe) 179 { 180 return pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Class, Spacing), pegged.peg.wrapAround!(Spacing, Comment, Spacing), pegged.peg.wrapAround!(Spacing, Inherit, Spacing)), "PlantUML_ClassDiagram.Content")(TParseTree("", false,[], s)); 181 } 182 else 183 { 184 forgetMemo(); 185 return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Class, Spacing), pegged.peg.wrapAround!(Spacing, Comment, Spacing), pegged.peg.wrapAround!(Spacing, Inherit, Spacing)), "PlantUML_ClassDiagram.Content"), "Content")(TParseTree("", false,[], s)); 186 } 187 } 188 static string Content(GetName g) 189 { 190 return "PlantUML_ClassDiagram.Content"; 191 } 192 193 static TParseTree Class(TParseTree p) 194 { 195 if(__ctfe) 196 { 197 return pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("class"), pegged.peg.oneOrMore!(space), ClassName, pegged.peg.zeroOrMore!(blank), pegged.peg.option!(ClassBody)), "PlantUML_ClassDiagram.Class")(p); 198 } 199 else 200 { 201 if (auto m = tuple(`Class`, p.end) in memo) 202 return *m; 203 else 204 { 205 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("class"), pegged.peg.oneOrMore!(space), ClassName, pegged.peg.zeroOrMore!(blank), pegged.peg.option!(ClassBody)), "PlantUML_ClassDiagram.Class"), "Class")(p); 206 memo[tuple(`Class`, p.end)] = result; 207 return result; 208 } 209 } 210 } 211 212 static TParseTree Class(string s) 213 { 214 if(__ctfe) 215 { 216 return pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("class"), pegged.peg.oneOrMore!(space), ClassName, pegged.peg.zeroOrMore!(blank), pegged.peg.option!(ClassBody)), "PlantUML_ClassDiagram.Class")(TParseTree("", false,[], s)); 217 } 218 else 219 { 220 forgetMemo(); 221 return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("class"), pegged.peg.oneOrMore!(space), ClassName, pegged.peg.zeroOrMore!(blank), pegged.peg.option!(ClassBody)), "PlantUML_ClassDiagram.Class"), "Class")(TParseTree("", false,[], s)); 222 } 223 } 224 static string Class(GetName g) 225 { 226 return "PlantUML_ClassDiagram.Class"; 227 } 228 229 static TParseTree ClassName(TParseTree p) 230 { 231 if(__ctfe) 232 { 233 return pegged.peg.defined!(identifier, "PlantUML_ClassDiagram.ClassName")(p); 234 } 235 else 236 { 237 if (auto m = tuple(`ClassName`, p.end) in memo) 238 return *m; 239 else 240 { 241 TParseTree result = hooked!(pegged.peg.defined!(identifier, "PlantUML_ClassDiagram.ClassName"), "ClassName")(p); 242 memo[tuple(`ClassName`, p.end)] = result; 243 return result; 244 } 245 } 246 } 247 248 static TParseTree ClassName(string s) 249 { 250 if(__ctfe) 251 { 252 return pegged.peg.defined!(identifier, "PlantUML_ClassDiagram.ClassName")(TParseTree("", false,[], s)); 253 } 254 else 255 { 256 forgetMemo(); 257 return hooked!(pegged.peg.defined!(identifier, "PlantUML_ClassDiagram.ClassName"), "ClassName")(TParseTree("", false,[], s)); 258 } 259 } 260 static string ClassName(GetName g) 261 { 262 return "PlantUML_ClassDiagram.ClassName"; 263 } 264 265 static TParseTree ClassBody(TParseTree p) 266 { 267 if(__ctfe) 268 { 269 return pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Class, Spacing), pegged.peg.fuse!(pegged.peg.wrapAround!(Spacing, pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, ClassContent, Spacing)), Spacing))), Spacing)), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing)), "PlantUML_ClassDiagram.ClassBody")(p); 270 } 271 else 272 { 273 if (auto m = tuple(`ClassBody`, p.end) in memo) 274 return *m; 275 else 276 { 277 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Class, Spacing), pegged.peg.fuse!(pegged.peg.wrapAround!(Spacing, pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, ClassContent, Spacing)), Spacing))), Spacing)), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing)), "PlantUML_ClassDiagram.ClassBody"), "ClassBody")(p); 278 memo[tuple(`ClassBody`, p.end)] = result; 279 return result; 280 } 281 } 282 } 283 284 static TParseTree ClassBody(string s) 285 { 286 if(__ctfe) 287 { 288 return pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Class, Spacing), pegged.peg.fuse!(pegged.peg.wrapAround!(Spacing, pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, ClassContent, Spacing)), Spacing))), Spacing)), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing)), "PlantUML_ClassDiagram.ClassBody")(TParseTree("", false,[], s)); 289 } 290 else 291 { 292 forgetMemo(); 293 return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("{"), Spacing), pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.or!(pegged.peg.wrapAround!(Spacing, Class, Spacing), pegged.peg.fuse!(pegged.peg.wrapAround!(Spacing, pegged.peg.zeroOrMore!(pegged.peg.wrapAround!(Spacing, ClassContent, Spacing)), Spacing))), Spacing)), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("}"), Spacing)), "PlantUML_ClassDiagram.ClassBody"), "ClassBody")(TParseTree("", false,[], s)); 294 } 295 } 296 static string ClassBody(GetName g) 297 { 298 return "PlantUML_ClassDiagram.ClassBody"; 299 } 300 301 static TParseTree ClassContent(TParseTree p) 302 { 303 if(__ctfe) 304 { 305 return pegged.peg.defined!(pegged.peg.and!(pegged.peg.negLookahead!(Class), pegged.peg.negLookahead!(pegged.peg.literal!("}")), pegged.peg.any), "PlantUML_ClassDiagram.ClassContent")(p); 306 } 307 else 308 { 309 if (auto m = tuple(`ClassContent`, p.end) in memo) 310 return *m; 311 else 312 { 313 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.negLookahead!(Class), pegged.peg.negLookahead!(pegged.peg.literal!("}")), pegged.peg.any), "PlantUML_ClassDiagram.ClassContent"), "ClassContent")(p); 314 memo[tuple(`ClassContent`, p.end)] = result; 315 return result; 316 } 317 } 318 } 319 320 static TParseTree ClassContent(string s) 321 { 322 if(__ctfe) 323 { 324 return pegged.peg.defined!(pegged.peg.and!(pegged.peg.negLookahead!(Class), pegged.peg.negLookahead!(pegged.peg.literal!("}")), pegged.peg.any), "PlantUML_ClassDiagram.ClassContent")(TParseTree("", false,[], s)); 325 } 326 else 327 { 328 forgetMemo(); 329 return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.negLookahead!(Class), pegged.peg.negLookahead!(pegged.peg.literal!("}")), pegged.peg.any), "PlantUML_ClassDiagram.ClassContent"), "ClassContent")(TParseTree("", false,[], s)); 330 } 331 } 332 static string ClassContent(GetName g) 333 { 334 return "PlantUML_ClassDiagram.ClassContent"; 335 } 336 337 static TParseTree Inherit(TParseTree p) 338 { 339 if(__ctfe) 340 { 341 return pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, InheritRight, Spacing), pegged.peg.wrapAround!(Spacing, InheritLeft, Spacing)), "PlantUML_ClassDiagram.Inherit")(p); 342 } 343 else 344 { 345 if (auto m = tuple(`Inherit`, p.end) in memo) 346 return *m; 347 else 348 { 349 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, InheritRight, Spacing), pegged.peg.wrapAround!(Spacing, InheritLeft, Spacing)), "PlantUML_ClassDiagram.Inherit"), "Inherit")(p); 350 memo[tuple(`Inherit`, p.end)] = result; 351 return result; 352 } 353 } 354 } 355 356 static TParseTree Inherit(string s) 357 { 358 if(__ctfe) 359 { 360 return pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, InheritRight, Spacing), pegged.peg.wrapAround!(Spacing, InheritLeft, Spacing)), "PlantUML_ClassDiagram.Inherit")(TParseTree("", false,[], s)); 361 } 362 else 363 { 364 forgetMemo(); 365 return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.wrapAround!(Spacing, InheritRight, Spacing), pegged.peg.wrapAround!(Spacing, InheritLeft, Spacing)), "PlantUML_ClassDiagram.Inherit"), "Inherit")(TParseTree("", false,[], s)); 366 } 367 } 368 static string Inherit(GetName g) 369 { 370 return "PlantUML_ClassDiagram.Inherit"; 371 } 372 373 static TParseTree InheritRight(TParseTree p) 374 { 375 if(__ctfe) 376 { 377 return pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, RelateIdFrom, Spacing), pegged.peg.discard!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-"), Spacing)), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("|>"), Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, RelateIdTo, Spacing)), "PlantUML_ClassDiagram.InheritRight")(p); 378 } 379 else 380 { 381 if (auto m = tuple(`InheritRight`, p.end) in memo) 382 return *m; 383 else 384 { 385 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, RelateIdFrom, Spacing), pegged.peg.discard!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-"), Spacing)), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("|>"), Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, RelateIdTo, Spacing)), "PlantUML_ClassDiagram.InheritRight"), "InheritRight")(p); 386 memo[tuple(`InheritRight`, p.end)] = result; 387 return result; 388 } 389 } 390 } 391 392 static TParseTree InheritRight(string s) 393 { 394 if(__ctfe) 395 { 396 return pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, RelateIdFrom, Spacing), pegged.peg.discard!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-"), Spacing)), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("|>"), Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, RelateIdTo, Spacing)), "PlantUML_ClassDiagram.InheritRight")(TParseTree("", false,[], s)); 397 } 398 else 399 { 400 forgetMemo(); 401 return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, RelateIdFrom, Spacing), pegged.peg.discard!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-"), Spacing)), pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("|>"), Spacing)), Spacing)), pegged.peg.wrapAround!(Spacing, RelateIdTo, Spacing)), "PlantUML_ClassDiagram.InheritRight"), "InheritRight")(TParseTree("", false,[], s)); 402 } 403 } 404 static string InheritRight(GetName g) 405 { 406 return "PlantUML_ClassDiagram.InheritRight"; 407 } 408 409 static TParseTree InheritLeft(TParseTree p) 410 { 411 if(__ctfe) 412 { 413 return pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, RelateIdTo, Spacing), pegged.peg.discard!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<|"), Spacing), pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-"), Spacing))), Spacing)), pegged.peg.wrapAround!(Spacing, RelateIdFrom, Spacing)), "PlantUML_ClassDiagram.InheritLeft")(p); 414 } 415 else 416 { 417 if (auto m = tuple(`InheritLeft`, p.end) in memo) 418 return *m; 419 else 420 { 421 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, RelateIdTo, Spacing), pegged.peg.discard!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<|"), Spacing), pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-"), Spacing))), Spacing)), pegged.peg.wrapAround!(Spacing, RelateIdFrom, Spacing)), "PlantUML_ClassDiagram.InheritLeft"), "InheritLeft")(p); 422 memo[tuple(`InheritLeft`, p.end)] = result; 423 return result; 424 } 425 } 426 } 427 428 static TParseTree InheritLeft(string s) 429 { 430 if(__ctfe) 431 { 432 return pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, RelateIdTo, Spacing), pegged.peg.discard!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<|"), Spacing), pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-"), Spacing))), Spacing)), pegged.peg.wrapAround!(Spacing, RelateIdFrom, Spacing)), "PlantUML_ClassDiagram.InheritLeft")(TParseTree("", false,[], s)); 433 } 434 else 435 { 436 forgetMemo(); 437 return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.wrapAround!(Spacing, RelateIdTo, Spacing), pegged.peg.discard!(pegged.peg.wrapAround!(Spacing, pegged.peg.and!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("<|"), Spacing), pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, pegged.peg.literal!("-"), Spacing))), Spacing)), pegged.peg.wrapAround!(Spacing, RelateIdFrom, Spacing)), "PlantUML_ClassDiagram.InheritLeft"), "InheritLeft")(TParseTree("", false,[], s)); 438 } 439 } 440 static string InheritLeft(GetName g) 441 { 442 return "PlantUML_ClassDiagram.InheritLeft"; 443 } 444 445 static TParseTree RelateIdFrom(TParseTree p) 446 { 447 if(__ctfe) 448 { 449 return pegged.peg.defined!(identifier, "PlantUML_ClassDiagram.RelateIdFrom")(p); 450 } 451 else 452 { 453 if (auto m = tuple(`RelateIdFrom`, p.end) in memo) 454 return *m; 455 else 456 { 457 TParseTree result = hooked!(pegged.peg.defined!(identifier, "PlantUML_ClassDiagram.RelateIdFrom"), "RelateIdFrom")(p); 458 memo[tuple(`RelateIdFrom`, p.end)] = result; 459 return result; 460 } 461 } 462 } 463 464 static TParseTree RelateIdFrom(string s) 465 { 466 if(__ctfe) 467 { 468 return pegged.peg.defined!(identifier, "PlantUML_ClassDiagram.RelateIdFrom")(TParseTree("", false,[], s)); 469 } 470 else 471 { 472 forgetMemo(); 473 return hooked!(pegged.peg.defined!(identifier, "PlantUML_ClassDiagram.RelateIdFrom"), "RelateIdFrom")(TParseTree("", false,[], s)); 474 } 475 } 476 static string RelateIdFrom(GetName g) 477 { 478 return "PlantUML_ClassDiagram.RelateIdFrom"; 479 } 480 481 static TParseTree RelateIdTo(TParseTree p) 482 { 483 if(__ctfe) 484 { 485 return pegged.peg.defined!(identifier, "PlantUML_ClassDiagram.RelateIdTo")(p); 486 } 487 else 488 { 489 if (auto m = tuple(`RelateIdTo`, p.end) in memo) 490 return *m; 491 else 492 { 493 TParseTree result = hooked!(pegged.peg.defined!(identifier, "PlantUML_ClassDiagram.RelateIdTo"), "RelateIdTo")(p); 494 memo[tuple(`RelateIdTo`, p.end)] = result; 495 return result; 496 } 497 } 498 } 499 500 static TParseTree RelateIdTo(string s) 501 { 502 if(__ctfe) 503 { 504 return pegged.peg.defined!(identifier, "PlantUML_ClassDiagram.RelateIdTo")(TParseTree("", false,[], s)); 505 } 506 else 507 { 508 forgetMemo(); 509 return hooked!(pegged.peg.defined!(identifier, "PlantUML_ClassDiagram.RelateIdTo"), "RelateIdTo")(TParseTree("", false,[], s)); 510 } 511 } 512 static string RelateIdTo(GetName g) 513 { 514 return "PlantUML_ClassDiagram.RelateIdTo"; 515 } 516 517 static TParseTree Comment(TParseTree p) 518 { 519 if(__ctfe) 520 { 521 return pegged.peg.defined!(pegged.peg.and!(pegged.peg.zeroOrMore!(space), pegged.peg.discard!(pegged.peg.literal!("\'")), pegged.peg.fuse!(pegged.peg.zeroOrMore!(pegged.peg.and!(pegged.peg.negLookahead!(eol), pegged.peg.any))), pegged.peg.discard!(eol)), "PlantUML_ClassDiagram.Comment")(p); 522 } 523 else 524 { 525 if (auto m = tuple(`Comment`, p.end) in memo) 526 return *m; 527 else 528 { 529 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.zeroOrMore!(space), pegged.peg.discard!(pegged.peg.literal!("\'")), pegged.peg.fuse!(pegged.peg.zeroOrMore!(pegged.peg.and!(pegged.peg.negLookahead!(eol), pegged.peg.any))), pegged.peg.discard!(eol)), "PlantUML_ClassDiagram.Comment"), "Comment")(p); 530 memo[tuple(`Comment`, p.end)] = result; 531 return result; 532 } 533 } 534 } 535 536 static TParseTree Comment(string s) 537 { 538 if(__ctfe) 539 { 540 return pegged.peg.defined!(pegged.peg.and!(pegged.peg.zeroOrMore!(space), pegged.peg.discard!(pegged.peg.literal!("\'")), pegged.peg.fuse!(pegged.peg.zeroOrMore!(pegged.peg.and!(pegged.peg.negLookahead!(eol), pegged.peg.any))), pegged.peg.discard!(eol)), "PlantUML_ClassDiagram.Comment")(TParseTree("", false,[], s)); 541 } 542 else 543 { 544 forgetMemo(); 545 return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.zeroOrMore!(space), pegged.peg.discard!(pegged.peg.literal!("\'")), pegged.peg.fuse!(pegged.peg.zeroOrMore!(pegged.peg.and!(pegged.peg.negLookahead!(eol), pegged.peg.any))), pegged.peg.discard!(eol)), "PlantUML_ClassDiagram.Comment"), "Comment")(TParseTree("", false,[], s)); 546 } 547 } 548 static string Comment(GetName g) 549 { 550 return "PlantUML_ClassDiagram.Comment"; 551 } 552 553 static TParseTree opCall(TParseTree p) 554 { 555 TParseTree result = decimateTree(UML(p)); 556 result.children = [result]; 557 result.name = "PlantUML_ClassDiagram"; 558 return result; 559 } 560 561 static TParseTree opCall(string input) 562 { 563 if(__ctfe) 564 { 565 return PlantUML_ClassDiagram(TParseTree(``, false, [], input, 0, 0)); 566 } 567 else 568 { 569 forgetMemo(); 570 return PlantUML_ClassDiagram(TParseTree(``, false, [], input, 0, 0)); 571 } 572 } 573 static string opCall(GetName g) 574 { 575 return "PlantUML_ClassDiagram"; 576 } 577 578 579 static void forgetMemo() 580 { 581 memo = null; 582 } 583 } 584 } 585 586 alias GenericPlantUML_ClassDiagram!(ParseTree).PlantUML_ClassDiagram PlantUML_ClassDiagram; 587